/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package BancoDados;

import Utilidades.UtilityDB;
import java.sql.ResultSet;
import javax.servlet.http.HttpServletRequest;

/**
 * Created on : May 18, 2011, 7:54:34 PM
 * @author diogo
 */
public class Profissao extends Dado implements Entidade {

	@Override
	public String getTableName() {
		return "Profissao";
	}

	@Override
	public String[] getPrimaryKey() {
		return new String[]{"CodProfissao"};
	}

	@Override
	public String[] getColumns() {
		return new String[]{"Descricao", "AreaCodArea"};
	}
	private int CodProfissao;
	private String Descricao;
	private int AreacodArea;

	// <editor-fold defaultstate="collapsed" desc="Gets">
	public int getCodProfissao() {
		return CodProfissao;
	}

	public int getAreacodArea() {
		return AreacodArea;
	}

	public String getDescricao() {
		return Descricao;
	}

	public Profissao(int CodProfissao, String Descricao, int AreacodArea) {
		this.CodProfissao = CodProfissao;
		this.Descricao = Descricao;
		this.AreacodArea = AreacodArea;
	}

	public Profissao() {
	}
	// </editor-fold>

	public static boolean Inserir(String Descricao, int AreaCodArea) {

		Profissao p = new Profissao();
		String[] colunas = p.getColumns();
		int x = 0;

		String SQL = UtilityDB.CreateInsert(p.getTableName(),
				colunas[x++], Descricao,
				colunas[x++], AreaCodArea);

		int linhasAfetadas = c.cadastrar(SQL);
		return linhasAfetadas > 0;

	}

	public static boolean Inserir(HttpServletRequest request) {
		String[] colunas = new Profissao().getColumns();
		int x = 0;

		String Descricao = request.getParameter(colunas[x++]);
		int AreaCodArea = Integer.parseInt(request.getParameter(colunas[x++]));

		return Inserir(Descricao, AreaCodArea);
	}

	/**
	 * funcao para pegar uma lista de profissoes filtrado ou nao.
	 * @param filtroNome filtrar pelo nome da profissao. tudo q contenha.
	 * @param AreaCodArea codigo da area pra filtrar.
	 * @return
	 */
	public static Profissao[] Listar(int AreaCodArea, String Descricao) {
		Profissao[] output = null;
		Profissao temp = new Profissao();
		String SQL = "";

		// montar SQL
		if (AreaCodArea != -1) {
			SQL = UtilityDB.CallFunction("fn_filtrar_profissao", AreaCodArea);

		} else if (Descricao != null && !Descricao.equals("")){
			SQL = UtilityDB.CallFunction("fn_filtrar_profissao", Descricao);
		} else {
			SQL = UtilityDB.CreateSelect(temp.getTableName()) + " order by codProfissao";

		}

		try {
			ResultSet rs = c.consultar(SQL, -1, true);
			int size = UtilityDB.GetRowAmount(rs);
			output = new Profissao[size];
			int x = 0;
			String[] columns = {
				temp.getPrimaryKey()[0],
				temp.getColumns()[0],
				temp.getColumns()[1]
			};


			while (rs.next()) {
				//output[x++] = new Profissao(rs.getInt(columns[0]), rs.getString(columns[1]));
				output[x++] = new Profissao(
						rs.getInt(columns[0]),
						rs.getString(columns[1]),
						rs.getInt(columns[2])
					);
				System.out.println(String.format("desc: %s, id: %s;", output[x - 1].Descricao, output[x - 1].CodProfissao));

			}

		} catch (Exception e) {
		}

		return output;
	}

	public static boolean Alterar(int CodProfissao, String nome, int CodArea){
		String SQL = UtilityDB.CallFunction("fn_atualizar_profissao", CodProfissao, nome, CodArea);
		boolean resultado = false;

		try {
			//*
			ResultSet rs = c.consultar(SQL);
			rs.next();
			resultado = rs.getBoolean(1);
			//*/
		} catch (Exception e) {
			resultado = false;
		}

		return resultado;
	}

	public static boolean Deletar(int CodProfissao){
		String SQL = UtilityDB.CallFunction("fn_deletar_profissao", CodProfissao);
		boolean resultado = false;

		try {
			//*
			ResultSet rs = c.consultar(SQL);
			rs.next();
			resultado = rs.getBoolean(1);
			//*/
		} catch (Exception e) {
			resultado = false;
		}

		return resultado;
	}

	public static ResultSet BuscaProfissao(int CodProfissao){
		ResultSet rs = null;
		try {
			String SQL = UtilityDB.CallFunction("fn_busca_profissao", CodProfissao);
			rs = c.consultar(SQL);
		} catch (Exception e) {
			rs = null;
		}
		return rs;
	}
	//fn_atualizar_profissao
}
